home *** CD-ROM | disk | FTP | other *** search
- /*
- IC Events.c
-
- */
-
- #include <EPPC.h>
- #include <AppleEvents.h>
-
- #include "IC Globals.h"
- #include "IC Document.h"
- #include "IC Windows.h"
- #include "IC Misc Subs.h"
- #include "IC Install.h"
- #include "IC Window Globals.h"
-
- #include "IC Events.h"
-
- void DoDiskEvent(long message){
- Point pt;
-
- if (HiWord(message)!=0){
- pt.h=(qd.screenBits.bounds.right-qd.screenBits.bounds.left-304)/2;
- pt.v=(qd.screenBits.bounds.bottom-qd.screenBits.bounds.top-156)/3;
- InitCursor();
- DIBadMount(pt,message);
- }
- }
-
- void DoActivateDeactivate(WindowPtr window,Boolean activate){
- if (activate)
- SelectWindow(window);
- WindowActivateDeactivate(window,activate);
- }
-
- void DoSuspendResume(Boolean resume){
- WindowPtr window=FrontWindow();
-
- in_foreground=resume;
- if (window!=(WindowPtr)0)
- DoActivateDeactivate(window,resume);
- InitCursor();
- }
-
- void DoUpdate(WindowPtr window,EventRecord* er){
- BeginUpdate(window);
-
- EndUpdate(window);
- }
-
- void DoKey(EventRecord* er){
- WindowsDoKey(er);
- }
-
- void DoAutoKey(EventRecord* er){
- DoKey(er);
- }
-
- void AdjustMenus(void){
- WindowsAdjustMenus();
- }
-
- void AdjustAllMenus(EventRecord* er){
- MenuHandle mh=GetMenuHandle(M_File);
- Boolean close,save,saveas;
- Str255 tmpstr;
-
- AdjustMenus();
-
- close=(IsDocOpen())||(GetWindowType(FrontWindow())==WT_About);
- save=IsDocDirty()||IsDocNew();
- saveas=IsDocOpen();
-
- if (er->modifiers&&optionKey){
- // set the close menu item to close all
- GetItem(mh,FM_Close,tmpstr);
- if (IUEqualString(tmpstr,"\pClose")==0){
- SetItem(mh,FM_Close,"\pClose All");
- }
- } else {
- // set the close menu item to close
- GetItem(mh,FM_Close,tmpstr);
- if (IUEqualString(tmpstr,"\pClose All")==0){
- SetItem(mh,FM_Close,"\pClose");
- }
- }
-
- SetItemEnable(mh,FM_Close,close);
- SetItemEnable(mh,FM_Save,save);
- SetItemEnable(mh,FM_SaveAs,saveas);
-
- AdjustInstallMenu(M_Install);
-
- mh=GetMenuHandle(M_Windows);
-
- if (IsDocOpen())
- GetDocumentName(tmpstr);
- else
- GetAString(tmpstr,128,15);
-
- SetMenuItemText(mh,1,tmpstr);
-
- }
-
- void DoIdle(void){
- WindowsIdle();
- }
-
- void DoMenu(short menu,short item,Boolean option){
- Str255 DAName;
-
- switch (menu){
- case M_Apple:
- switch(item){
- case 1:
- DisplayError(acOpenWindow,WindowsOpen(WT_About));
- break;
- case 2:
- break;
- default:
- GetMenuItemText(GetMenuHandle(M_Apple),item,DAName);
- OpenDeskAcc(DAName);
- break;
- }
- break;
- case M_File:
- switch(item){
- case FM_New:
- DisplayError(acNewDocument,DoNewDoc());
- break;
- case FM_Open:
- DisplayError(acOpenDocument,DoSFOpen());
- break;
- case FM_OpenInternetPreferences:
- DisplayError(acOpenDocument,DoOpenInternetPreferences());
- break;
- case FM_Close:
- if (option)
- DisplayError(acCloseWindow,WindowsCloseAll());
- else
- DisplayError(acCloseWindow,DoCloseDocWindow(FrontWindow()));
- break;
- case FM_Save:
- DisplayError(acSave,DoSave());
- break;
- case FM_SaveAs:
- DisplayError(acSave,DoSaveAs());
- break;
- case FM_Quit:
- DisplayError(acQuit,DoQuit());
- break;
- default:
- break;
- }
- break;
- case M_Edit:
- switch(item){
- case EM_Undo:
- case EM_Cut:
- case EM_Copy:
- case EM_Paste:
- case EM_Clear:
- case EM_SelectAll:
- WindowsDoEditMenu(item);
- break;
- default:
- break;
- }
- break;
- case M_Install:
- DoInstallMenu(menu,item);
- break;
- case M_Windows:
- DisplayError(acOpenWindow,WindowsOpen((WindowType)WT_Main+item-1));
- break;
- default:
- break;
- }
-
- if (!quitnow)
- HiliteMenu(0);
- }
-
- void DoMainClick(EventRecord* er,WindowPtr wp,short code){
- long mResult;
- Boolean needsselect;
- Rect tempRect;
-
- needsselect=((wp!=(WindowPtr)0)&&(wp!=FrontWindow()));
-
- if ((needsselect)&&(!((code==inDrag)||(code==inContent))))
- SelectWindow(wp);
-
- switch (code){
- case inMenuBar:
- AdjustAllMenus(er);
- mResult=MenuSelect(er->where);
- if (mResult!=0)
- DoMenu(HiWord(mResult),LoWord(mResult),(er->modifiers&&optionKey));
- if (!quitnow)
- HiliteMenu(0);
- break;
- case inDrag:
- if ((needsselect)&&((er->modifiers&cmdKey)==0))
- SelectWindow(wp);
- SetPort(wp);
- {
- RgnHandle rgn=GetGrayRgn();
- tempRect=(*rgn)->rgnBBox;
- }
- DragWindow(wp,er->where,&tempRect);
- break;
- case inGrow:
- break;
- case inZoomIn:
- case inZoomOut:
- break;
- case inGoAway:
- if (TrackGoAway(wp,er->where))
- DisplayError(acCloseWindow,DoCloseDocWindow(wp));
- break;
- case inContent:
- if (needsselect)
- SelectWindow(wp);
- break;
- case inSysWindow:
- SystemClick(er,wp);
- break;
- default:
- break;
- }
- }
-
- void DimMenuTitles(void){
- MenuHandle mh;
- long flags;
- short i;
- Boolean old_enable_title,enable_title,menu_bar_redraw;
-
- AdjustMenus();
- // edit
- mh=GetMenuHandle(M_Edit);
- flags=(*mh)->enableFlags;
- old_enable_title=flags&1;
- enable_title=false;
-
- for (i=1;i<=CountMItems(mh);i++){
- if (flags&(1<<i)){
- enable_title=true;
- break;
- }
- }
- SetItemEnable(mh,0,enable_title);
- menu_bar_redraw=(enable_title!=old_enable_title);
-
- // windows
-
- mh=GetMenuHandle(M_Windows);
- flags=(*mh)->enableFlags;
- old_enable_title=flags&1;
- enable_title=IsDocOpen();
- SetItemEnable(mh,0,enable_title);
- menu_bar_redraw |= (enable_title!=old_enable_title);
-
- if (menu_bar_redraw)
- DrawMenuBar();
- }
-
- void HandleEvents(void){
- EventRecord er;
- short code;
- WindowPtr wp;
- char ch;
- long mResult;
- Boolean b;
- short item;
-
- DimMenuTitles();
- WaitNextEvent(everyEvent,&er,10,(RgnHandle)0);
-
- ch=(char)(er.message&charCodeMask);
- DoIdle();
- b=true;
-
- if (WindowsEarlyHandleEvent(&er))
- b=false;
-
- if ((b)&&((er.what==keyDown)||(er.what==autoKey))){
- if (er.modifiers & cmdKey){
- AdjustAllMenus(&er);
- mResult=MenuKey(ch);
- if (mResult){
- DoMenu(HiWord(mResult),LoWord(mResult),(er.modifiers&&optionKey));
- b=false;
- }
- }
- if ((b)&&(WindowsEarlyHandleKey(&er)))
- b=false;
- }
- if ((b)&&(IsDialogEvent(&er))){
- if (DialogSelect(&er,&wp,&item)){
- WindowItemWhere(wp,&er,item);
- b=false;
- }
- }
-
- if (b){
- switch (er.what){
- case mouseDown:
- code=FindWindow(er.where,&wp);
- if (wp==(WindowPtr)0)
- wp=FrontWindow();
- DoMainClick(&er,wp,code);
- break;
- case keyDown:
- DoKey(&er);
- break;
- case autoKey:
- DoAutoKey(&er);
- break;
- case updateEvt:
- DoUpdate((WindowPtr)er.message,&er);
- break;
- case activateEvt:
- DoActivateDeactivate((WindowPtr)er.message,er.modifiers&1);
- break;
- case kOSEvent:
- if (er.message&0x01000000){
- DoSuspendResume(er.message&1);
- }
- break;
- case diskEvt:
- DoDiskEvent(er.message);
- break;
- case kHighLevelEvent:
- if (Has_AppleEvents){
- AEProcessAppleEvent(&er);
- }
- break;
- default:
- break;
- }
- }
- }
-
-